import config from '../config/index.js'

// 超时时间，单位 ms
const timeout = 10 * 1000

// 接口地址
const baseUrl = config.url

// 接口对象
const api = {};

/* 
	定义接口方法
	desc 接口描述
	name 方法名 例如: $api.name 请求接口
	url 接口路径
	method 请求方式 空值为get请求
 */

const apiList = [
	{
		desc: '首页海报接口',
		name: 'banners',
		url: '/banners'
	},
	{	
		// 所有线下， 相关详情添加参数offlineId
		desc: '线下项目接口',
		name: 'offlines',
		url: '/offlines'
	},
	{
		// 所有线上， 相关详情添加参数onlineId
		desc: '线上项目接口',
		name: 'onlines',
		url: '/onlines'
	},
	{
		// 所有视频， 相关详情添加参数videoId
		desc: '视频案例接口',
		name: 'videos',
		url: '/videos'
	},
	{
		desc: '搜索项目接口',
		name: 'search',
		url: '/search'
	},
	{
		desc: '行业列表',
		name: 'industies',
		url: '/industies'	
	},
	{
		desc: '案例发布留言',
		name: 'projectsMessage',
		url: '/projects/message',
		method: "POST"
	},
	
]

/* 遍历接口 */
apiList.forEach( item => {
	api[item.name] = function(params){
		let {data, header, dataType, ljUrl} = params || {};
		
		return new Promise((resolve, reject) => {
			try{
				uni.request({
					url: ljUrl ? baseUrl + item.url + '/'+ ljUrl : item.url.indexOf("http") == -1 ? baseUrl + item.url : item.url,
					// url: baseUrl + item.url,
					data: data,
					method: item.method || "GET",
					header: header,
					dataType: dataType,
					timeout: timeout,
					success:(res) => {
						if(res.data != null && res.data.hasOwnProperty('code') && res.data.code === 200){
							resolve(parseSuccessResponseData(res))
						}else{
							resolve(parseFailResponseData(res))
						}
					},
					fail: (e) => {
						console.log("错误URl:", item.url)
						reject(parseFailResponseData(e))
					}
				})
			}catch(e) {
				console.log("异常：", e)
				reject({
					message: "请求错误"
				})
				showToast("请求错误")
			}
		})
	}
})

/* 处理返回的格式不一样 */
function parseSuccessResponseData(res){
	return res.data || res.result
}
/* 处理错误 */
function parseFailResponseData(e){
	if(e.errMsg){
		console.log("请求错误,e:", e)
		// showToast(e.errMsg)
	}
	return e;
}
/* 错误提示 */
function showToast(message){
	uni.showToast({
		title: message,
		duration: 1500,
		icon: "none"
	})
}


export default api;

